/**
 * 格式化日期
 * @param {string|Date} date 日期对象或日期字符串
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date) {
  if (!date) return ''
  
  const d = new Date(date)
  if (isNaN(d.getTime())) return ''
  
  const today = new Date()
  const yesterday = new Date(today)
  yesterday.setDate(yesterday.getDate() - 1)
  
  // 转换为年月日
  const year = d.getFullYear()
  const month = String(d.getMonth() + 1).padStart(2, '0')
  const day = String(d.getDate()).padStart(2, '0')
  
  // 如果是今天
  if (d.toDateString() === today.toDateString()) {
    return '今天'
  }
  
  // 如果是昨天
  if (d.toDateString() === yesterday.toDateString()) {
    return '昨天'
  }
  
  // 如果是今年
  if (year === today.getFullYear()) {
    return `${month}月${day}日`
  }
  
  // 其他情况返回完整日期
  return `${year}年${month}月${day}日`
}

/**
 * 格式化时间
 * @param {string|Date} time 时间对象或时间字符串
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(time) {
  if (!time) return ''
  
  const d = new Date(time)
  if (isNaN(d.getTime())) return ''
  
  const hours = String(d.getHours()).padStart(2, '0')
  const minutes = String(d.getMinutes()).padStart(2, '0')
  
  return `${hours}:${minutes}`
}

/**
 * 格式化完整日期时间
 * @param {string|Date} datetime 日期时间对象或字符串
 * @returns {string} 格式化后的日期时间字符串
 */
export function formatDateTime(datetime) {
  if (!datetime) return ''
  
  const date = formatDate(datetime)
  const time = formatTime(datetime)
  
  return `${date} ${time}`
}

/**
 * 获取相对时间描述
 * @param {string|Date} time 时间对象或时间字符串
 * @returns {string} 相对时间描述
 */
export function getRelativeTime(time) {
  if (!time) return ''
  
  const d = new Date(time)
  if (isNaN(d.getTime())) return ''
  
  const now = new Date()
  const diff = now.getTime() - d.getTime()
  
  // 转换为秒
  const seconds = Math.floor(diff / 1000)
  
  if (seconds < 60) {
    return '刚刚'
  }
  
  // 转换为分钟
  const minutes = Math.floor(seconds / 60)
  if (minutes < 60) {
    return `${minutes}分钟前`
  }
  
  // 转换为小时
  const hours = Math.floor(minutes / 60)
  if (hours < 24) {
    return `${hours}小时前`
  }
  
  // 转换为天
  const days = Math.floor(hours / 24)
  if (days < 30) {
    return `${days}天前`
  }
  
  // 转换为月
  const months = Math.floor(days / 30)
  if (months < 12) {
    return `${months}个月前`
  }
  
  // 转换为年
  const years = Math.floor(months / 12)
  return `${years}年前`
} 